Go训练营第七课问题收集
2021年11月4日 更新
开启更多功能,提升办公效能
  1. 微服务服务间通信为什么偏向RPC而不是HTTP?<减少协议内容,增加传输效率>
  1. 一组数据先查缓存,如果没有再从数据库查询。怎么优雅的写出这段代码?
  1. /api目录下,如果是rest接口, 需要放什么内容?
  1. 为什么configs用复数,其他都是单数api,test等等
  1. 评价一下,依赖注入框架wire、uber/fx该如何选择
  1. 我有 10 个 service,20 个 usecase,10 个 repo,都在哪创建呀。我现在都是在 main 函数里创建,再组合起来,这个有点难受。
  • service看是否相关的,不相关的,都拆分成微服务去处理了。一般都是工具直接生成了service,就放service文件夹里头。 引用大明助教:一般来说,repo会负责从数据源捞到数据,并且组装成entity, value object 和 aggregated,复杂的会额外引入factory, builder来创建这三种对象
  1. 工程实践中,Go通常用哪些库进行金融精确计算?
  • 项目中,存储一般都不推荐使用float,double等。 会带来很多问题。
  1. 在main的init中进行全局db等资源申请、和资源清理?资源初始化后对象如何向service、biz、data层传递?
  • 这边db的资源就是在dao层调用,为什么其他层需要呢,这样管理不是很乱吗。像如果你有些值,比如msg里头,需要各各层都需要,那一般都放到context里头,进行传递。而如果是全局数据,一般pkg都会提供register和get等方法。进行获取注册等操作
  1. 服务部署要把cmd里面的exe文件分别拿到服务器上面部署吗 还有就是团队协作,比如一个团队搞个服务,要把所有服务代码都弄下来吗
  • 你说的这个,我理解是分支开发的问题,git可以很好的解决。 另外不同服务肯定都是隔离开的,业务不同并行开发处理。 至于依赖的公共库维护好。 公共库升级,业务针对性的升级即可
  1. v2版data层的代码能否举一个复杂点例子看看,有点想象不到
  • 这个得问问毛老师了。应该最近有可能会更新
  1. 最近在参考 https://github.com/bxcodec/go-clean-arch 做一些改造,但是有个问题就是跨repo的事务处理比较麻烦,可能存在一个 usecase 依赖多个 repo 的情况,现在就是尽量避免,必须要用的时候用一个 Transaction 方法包一包,老师有什么推荐的解决方案么?<如果确实存在无法避免的跨服务事务, 需要引入一个分布式事务处理方案,具体的实现方式有两阶段提交、补偿事务、本地消息表等,现阶段还没有特别好的直接拿来用的东西, 还是需要根据分布式事务处理方案去对系统做一些针对性改造。>
  1. 如何在公司里组织或者开始大型的项目重构,不断的演进项目架构?如何在不影响开发新功能的情况下,重构项目目录?B站是怎么推进这种工程重构的?希望能获得一些管理上的经验
  1. go2的泛型出来后repo层是不是就可以抽象key和entity公用方法,类似于自增长id或者guid,根据泛型抽象各种通用方法类似于分页
  1. HTTP 服务,对请求参数的校验有没有什么优雅的做法?
  1. 如果在monorepo里面,每个grpc的client interface都在不同的api目录里面,那么如果恰巧有两个服务需要相互调用怎么处理?不会环回引用吗?<A依赖B/api,  B依赖A/api, 不会有环回引用>
  1. data层是用于数据结构跟数据库层面的交互处理,对于数据报表统计类的操作,在微服务中怎么样处理的呢?<对于数据的聚合统计等操作,可以放到job中或task中进行处理。>
  1. 层与层之间的数据转换都需要用deepcopy么?deepcopy似乎只能手撸赋值,如果对象字段特别多这种赋值操作会很多,而且DTO、DAO、PO中其实大部分字段可能是一样的,如何比较优雅的处理?<目前我也没有找到特别好的方法,这是解耦必须要付出的代价。通过go generate去搞可能是一个可行的思路,不过暂时没有找到现成的靠谱的东西。>
  1. monorepo 下多个package main 和多个 func main 会有冲突吗,如何独立编译发布?
  1. 给毛老师记的 todo:有没有在需要业务逻辑层处理事务的情况?是否可以直接在 data 层完全做掉?
  1. 服务树节点如何组织,业务-服务-子服务,那组织架构是按业务划分的?在资源分配和权限上比组织架构的继承处理起来就会弱吧?这样的取舍重点的思考是什么?